package com.knowledge.common.config;


import cn.hutool.core.lang.UUID;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
import java.util.Map;
import java.util.Objects;

/**
 * @desc 主要是用于Websocket握手配置信息进行处理，记录连接websocket的客户端
 * @Author Liguanh
 */
@Slf4j
@Configuration

public class GetHttpSessionConfig extends ServerEndpointConfig.Configurator {
    /**
     * @desc 每一个客户端发起握手, 端点就有一个新的实列，那么引用的这个配置也是新的实列，
     * 这里sec的用户属性也不同就不会产生冲突。
     * 修改握手机制  就是第一次http发送过来的握手, 这个方法就是用来修改服务断点配置的属性信息
     * @param sec
     * @param request
     * @param response
     */
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {

        //从握手请求中获取session信息
        HttpSession session = (HttpSession) request.getHttpSession();

        //获取用户属性对象信息从sec中获取, 后续增加一些配置信息
        Map<String, Object> userProperties = sec.getUserProperties();

        /**
         * 一个客户端和和服务器发起一次请求交互 就有一个唯一session
         * 设置唯一标识：为每个客户端生成一个唯一的UUID作为连接标识，并将其存储在UserProperties中，便于后续跟踪与管理
         */
        String sessionKey = UUID.randomUUID().toString().replaceAll("-", "");

        userProperties.put("session",sessionKey);

        log.info("websocket连接发送过来信息,{}",sec.getUserProperties());
    }
}
